SC2006 - Software Engineering
Course Summary
SC2006 covers fundamental design principles and processes commonly encountered in software engineering projects. The module is split between two lecturers: Prof Shen Zhiqi leads the first half, while Prof Liu Yang, who brings valuable industry experience, teaches the second half and offers practical insights bridging theory and real-world application. Key topics include:
- Requirements Elicitation and Analysis
- Software Process Models
- Agile Software Development
- System and Object Design, including design patterns such as Factory, Facade, Observer, Strategy, and MVC
- Testing and Maintenance techniques like white box testing, black box testing, equivalence class testing, boundary value testing, and control flow testing The course is theoretical in nature and does not teach coding directly; however, students are expected to self-learn the necessary programming languages and frameworks (e.g., JavaScript, HTML, CSS, React, Flutter, MongoDB) to complete the project. While some find the lecture content dry and detached from the project, others appreciate the practical insights shared, especially in the latter half of the course.
Workload
The workload is considered heavy and demanding. It typically involves:
- Over 20 lectures (mostly 1-2 hours each)
- 9 tutorials where attendance is important since answers are not posted online
- Biweekly 2-hour labs
- One major group project accounting for 50% of the grade
- A 50% open-book final exam with time constraints that require efficient time management Students often spend significant time outside of class, especially on the group project. Theoretical content in lectures is not sufficient to cover the coding and development skills needed, so self-study is essential. The module is team-dependent, and managing group dynamics can be challenging, particularly if members contribute unevenly.
Projects
The group project requires developing a fully functional web or mobile application that integrates real-world data and real-time APIs. Groups typically consist of 5-6 members assigned by TAs. Deliverables include formal documentation such as a Requirements Elicitation and Analysis report, culminating in a live demo presentation. Students must independently learn relevant coding languages and frameworks, as these are not taught in class. The project is described as “epic” and barely doable without prior software engineering knowledge. Beginners are advised to focus on building a web app rather than a mobile app to manage complexity. It is recommended to keep the project scope manageable, aiming for around 8-10 use cases rather than overloading features. Good UI design can help distinguish the project. Starting early and maintaining clear communication within the group are critical to success.
Tips to Do Well
- Begin the group project as early as possible; do not follow the lab timeline too rigidly to avoid last-minute rushes.
- Learn front-end languages and relevant frameworks before the project starts to save time and reduce stress.
- Use GitHub with feature branching to coordinate work and prevent overlap.
- Set clear goals and hold regular meetings to keep everyone aligned, as the project is highly team-dependent.
- For the exam, create concise notes and practice past year papers thoroughly, as the exam tests application of concepts rather than rote memorization. Avoid relying solely on lengthy seniors’ notes during the exam to save time.
- Focus on understanding the patterns, diagrams, and testing methods covered in lectures, even if the lectures feel dry or disconnected.
- If coding skills are weak, consider prioritizing self-learning over attending lectures, or supplement with external concise notes.
- Be prepared for a challenging workload and difficulty level; prior software engineering knowledge is highly beneficial.
Based on reviews by KKP, GIS, ljr, HS